Basic認証のあるサイトをCloudFrontでキャッシュする
問題
ウェブサイトにアクセス制限を掛けるためにBasic認証やDigest認証が利用されることがあります。
このようにアクセス制限されたサイトの前段にデフォルト設定の Amazon CloudFront を設置すると、正しい認証情報を入力しても、認証ダイアログが無限ループで表示されます。
解決方法
Baisc/Digest認証のような HTTP 認証はチャレンジ・レスポンス方式で行われ、クライアントはサーバーからのレスポンス時に認証情報をリクエストヘッダーの Authorization
に含めます。
※図は "HTTP authentication - HTTP | MDN" から引用
したがって、同じURLに対して
Authorization
ヘッダーが空っぽ(新規アクセス)Authorization
の認証情報が間違っている
リクエストをもとに CloudFront がキャッシュすると、問題のようなことが起こります。
この問題を解決するには CloudFront のキャッシュキーにリクエストヘッダーの Authorization
を含めるようにします。
具体的には、CloudFront の Cache Behavior 設定画面において、Cache Based on Selected Request Headers を Whitelist 形式にし、Whitelist Headers に Authorization を追加します。
このようにすることで
Authorization
ヘッダーが空っぽ(新規アクセス)Authorization
の認証情報が間違っているAuthorization
の認証情報が正しい
リクエストを個別にキャッシュできるようになります。